package com.molichuxing.gateway.bff.orders.services;

import java.util.List;

import com.molichuxing.framework.exception.BizException;
import com.molichuxing.framework.service.RootService;
import com.molichuxing.gateway.bff.orders.entity.response.OrderAioVo;
import com.molichuxing.gateway.bff.orders.entity.response.OrderExclusivelDetailsVo;
import com.molichuxing.gateway.bff.orders.entity.response.OrderMobileListVo;
import com.molichuxing.gateway.bff.orders.entity.response.OrderSubscribeDetailsVo;
import com.molichuxing.gateway.bff.orders.entity.response.ReletVerifyVo;
import com.molichuxing.gateway.bff.user.entity.response.UserVo;

/**
 * 订单bff
 * 
 * @author zoumingyu
 * @date 2019年9月19日
 *
 */
public interface OrderBffService extends RootService {

	/**
	 * 查询用户订单列表信息（mobile）
	 * 
	 * @param userId
	 *            用户id
	 * @return
	 * @throws Exception
	 */
	public List<OrderMobileListVo> getMobileList(Integer userId, String appVersion) throws Exception;

	/**
	 * 查询用户未完成订单信息（AIO）
	 * 
	 * @param user
	 *            用户
	 * @param deviceNum
	 *            大屏cpu号
	 * @return
	 * @throws Exception
	 */
	public List<OrderAioVo> getAio(UserVo user, String deviceNum) throws Exception;

	/**
	 * 查询用户专属里程订单详情
	 * 
	 * @param userId
	 *            用户id
	 * @param orderCode
	 *            订单号
	 * @return
	 * @throws Exception
	 * @throws BizException
	 */
	public OrderExclusivelDetailsVo getExclusivelDetails(Integer userId, Long orderCode, String appVersion)
			throws BizException, Exception;

	/**
	 * 查询用户订阅里程订单详情
	 * 
	 * @param userId
	 *            用户id
	 * @param orderCode
	 *            订单号
	 * @return
	 * @throws BizException
	 * @throws Exception
	 */
	public OrderSubscribeDetailsVo getSubscribeDetails(Integer userId, Long orderCode, String appVersion)
			throws BizException, Exception;

	/**
	 * 检验是否可以加购
	 * 
	 * @param orderCode
	 *            订单号
	 * @return
	 */
	public ReletVerifyVo getVerifyPurchase(Long orderCode);

	/**
	 * 检验是否可以续订
	 * 
	 * @param orderCode
	 *            订单号
	 * @return
	 */
	public ReletVerifyVo getVerifyRenew(Long orderCode);
}
